package 懒汉式;

/**
 * @projectName: com.xiayuanxing.designPattern
 * @className: SingletonTest03
 * @author: xiayuanxing
 * @description: 懒汉式（线程不安全）
 * @date: 2021/12/16 9:47
 * @version: 1.0
 */
public class SingletonTest03 {

    // 1)起到了LazyLoading的效果，但是只能在单线程下使用。
    // 2)如果在多线程下，一个线程进入了if(singleton==null)判断语句块，还未来得及往下执行，
    // 另一个线程也通过了这个判断语句，这时便会产生多个实例。所以在多线程环境下不可使用这种方式
    // 3)结论：在实际开发中，不要使用这种方式

    public static void main(String[] args) {
        System.out.println("懒汉式1，线程不安全~");
        Singletion3 instance1 = Singletion3.getInstance();
        Singletion3 instance2 = Singletion3.getInstance();
        System.out.println(instance1 == instance2);
        System.out.println("instance1.hashCode="+instance1.hashCode());
        System.out.println("instance2.hashCode="+instance2.hashCode());
    }
}
class Singletion3{

    private static Singletion3 instance;

    //1.构造器私有化
    private Singletion3(){

    };

    //2.提供一个静态的公共方法，当使用该方法时，才去创建instance
    public static Singletion3 getInstance(){
        if (instance == null){
            instance = new Singletion3();
        }
        return instance;
    }
}